Software testing is an important stage of a software product development process. Ideally, a software testing process exhaustively tests as many user scenarios and machine configurations as possible, including installs, reinstalls, reboots, logons, multiple system configurations, etc. Identifiable user scenarios and machine configurations are numerous, and tests often require significant manual interaction to configure and execute. The complexity of modern testing requirements combined with manual interaction can introduce unnecessary errors, labor costs, and delays to the software testing process.
One approach to minimize the risks of manual errors, costs, and delays is to automate the testing process. Test automation software exists to decrease the manual interaction required, but these existing solutions are not architected to fully or flexibly support the complex testing requirements of a modern software product development process. Example testing requirements not adequately addressed by existing solutions are related to scenarios such as loss of control (e.g., reboots, hard disk image restores, and logouts) and remote test control of multiple test client machines from a single test server machine.